package com.yljk.yljkproject.ui;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.JsResult;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.alibaba.android.arouter.facade.annotation.Route;
import com.yljk.servicemanager.constants.RouterApi;
import com.yljk.servicemanager.oldbase.ModuleBaseActivity;
import com.yljk.yljkproject.R;
import com.yljk.yljkproject.utils.MedicomUtils;

@Route(path = RouterApi.CheckActivity)
public class CheckActivity extends ModuleBaseActivity {
    private WebView webView;

    private String sessionId;
    //private String appSecret;
    private String appParam;
    private final static String protocol = "mcProtocol";

    // 执行审查逻辑
    private void doCheck() {
        //mcSetCheck(sessionId,appid, appSecret, appParam)
        String param = "javascript:mcSetCheck('" + sessionId + "','medicom','medicom','" + appParam + "')";
        System.out.println("==>" + param);
        webView.evaluateJavascript(param, new ValueCallback<String>() {

            @Override
            public void onReceiveValue(String s) {
                // 这个方法只返回“0”或者“1”，无论审查成功或者失败，都会进入下面的callBack回调方法，所以重点关注下面的回调方法。
                if (s.equals("1")) {
                    // 审查成功
                    System.out.println("========审查成功===========");
//                    Toast.makeText(CheckActivity.this, s, Toast.LENGTH_SHORT).show();
                } else {
                    // 审查失败
//                    Toast.makeText(CheckActivity.this, s, Toast.LENGTH_LONG).show();
                    System.out.println("========审查失败===========");
                }
            }
        });
    }

    // 处理美康回调
    @JavascriptInterface
    public void callBack(String msg) {
        Intent intent = new Intent();
        System.out.println(msg);
        intent.putExtra("callBackMsg", msg);
        setResult(RESULT_OK, intent); // 添加回调的结果参数
        finish(); //回调后关闭本页面
    }

    // 禁用CheckActivity的返回按钮（使用美康的返回按钮，如果用户随意返回，会造成审方流程不通）
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        return keyCode == KeyEvent.KEYCODE_BACK;
    }

    @Override
    public int bondLayout() {
        return R.layout.activity_check;
    }

    @SuppressLint({"SetJavaScriptEnabled", "JavascriptInterface"})
    @Override
    public void initView() {
        TextView titleTv = findViewById(R.id.webviewtitle);
        ImageView backIv = findViewById(R.id.web_back);

        titleTv.setText("合理用药监测");
        backIv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        // 接收参数
        Intent intent = CheckActivity.this.getIntent();
        sessionId = intent.getStringExtra("sessionId");
        //appSecret = intent.getStringExtra("appSecret");
        appParam = intent.getStringExtra("appParam").trim().replace(" ","");

        // 设置WebView
        webView = (WebView) findViewById(R.id.webView);
        WebSettings webSettings = webView.getSettings();

//        配置webview保存密码选项
        webSettings.setSavePassword(false);

        webSettings.setJavaScriptEnabled(true); // 允许使用JS（必须设置为true）
        webSettings.setDomStorageEnabled(true); // 允许使用网页的缓存（比如localStorage和sessionStorage）（必须设置为true）
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true); // 允许js弹出alert对话框（和美康调试使用）
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); // 允许https和http混用（5.1以上默认禁止）
        }

        webView.loadUrl(MedicomUtils.PASS_SCREEN_URL);

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false; // 使用APP内部的WebView打开（必须设置为false）
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                doCheck();// 页面加载完毕，执行审核逻辑
            }
        });

        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                if (message != null) {
                    // 弹出对话框（需要和美康进行调试的时候使用）
//                    Toast.makeText(CheckActivity.this, message, Toast.LENGTH_LONG).show();
                }

                result.cancel(); // 一定要cancel，否则会出现各种奇怪问题
                return true;
            }

            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                //if (newProgress == 100) { // 当DOM加载完成，执行审核逻辑
                //doCheck();
                //}
            }


        });

        // 添加JavaScript回调接口
        webView.addJavascriptInterface(this, protocol);
    }

    @Override
    public void initData() {

    }

    @Override
    public void initEvent() {

    }
}